package com.shuaigexue.aicodegenerate.ai;

import com.shuaigexue.aicodegenerate.ai.model.HtmlCodeResult;
import com.shuaigexue.aicodegenerate.ai.model.MultiFileCodeResult;
import dev.langchain4j.service.SystemMessage;
import reactor.core.publisher.Flux;

/**
 * AI 代码生成服务
 */
public interface AiCodeGeneratorService {
    /**
     * 生成 Html 代码
     * @param userMessage  用户提示词
     * @return AI 的输出结果
     * 这里要给ai定义一个系统提示词，langchain4j进行代码编写的时候，我们只需一个@SystemMessage注解
     */
//    @SystemMessage(fromResource = "prompt/codegen-html-system-prompt.txt")
//    HtmlCodeResult generateHtmlCode(String userMessage);
//
//    /**
//     * 生成多文件代码
//     * @param userMessage  用户提示词
//     * @return AI 的输出结果
//     */
//    @SystemMessage(fromResource = "prompt/codegen-multi-file-system-prompt.txt")
//    MultiFileCodeResult generateMultiFileCode(String userMessage);
    /**
     * 生成 HTML 代码
     *
     * @param userMessage 用户消息
     * @return 生成的代码结果
     */
    @SystemMessage(fromResource = "prompt/codegen-html-system-prompt.txt")
    HtmlCodeResult generateHtmlCode(String userMessage);

    /**
     * 生成多文件代码
     *
     * @param userMessage 用户消息
     * @return 生成的代码结果
     */
    @SystemMessage(fromResource = "prompt/codegen-multi-file-system-prompt.txt")
    MultiFileCodeResult generateMultiFileCode(String userMessage);

    /**
     * 生成 HTML 代码(流式)
     *
     * @param userMessage 用户消息
     * @return 生成的代码结果
     */
    @SystemMessage(fromResource = "prompt/codegen-html-system-prompt.txt")
    Flux<String> generateHtmlCodeStream(String userMessage);

    /**
     * 生成多文件代码(流式)
     *
     * @param userMessage 用户消息
     * @return 生成的代码结果
     */
    @SystemMessage(fromResource = "prompt/codegen-multi-file-system-prompt.txt")
    Flux<String> generateMultiFileCodeStream(String userMessage);

}
